package com.ruoyi.staffing.service;

import com.ruoyi.staffing.domain.HrCandidate;
import com.ruoyi.staffing.domain.HrCandidateExperience;
import com.ruoyi.staffing.domain.HrCandidateFamily;

import java.util.List;

/**
 * HR-候选人(求职登记)主Mapper接口
 *
 * @author hango
 * @date 2025-10-13
 */
public interface IHrCandidateService
{

    /**
     * 查询HR-候选人(求职登记)主
     *
     * @param id HR-候选人(求职登记)主主键
     * @return HR-候选人(求职登记)主
     */
    HrCandidate selectHrCandidateById(Long id);

    /**
     * 查询HR-候选人(求职登记)主列表
     *
     * @param hrCandidate 查询条件
     * @return HR-候选人(求职登记)主集合
     */
    List<HrCandidate> selectHrCandidateList(HrCandidate hrCandidate);

    /**
     * 新增HR-候选人(求职登记)主
     *
     * @param hrCandidate 待新增对象
     * @return 影响行数
     */
    int insertHrCandidate(HrCandidate hrCandidate);

    /**
     * 修改HR-候选人(求职登记)主
     *
     * @param hrCandidate 待修改对象
     * @return 影响行数
     */
    int updateHrCandidate(HrCandidate hrCandidate);

    /**
     * 删除HR-候选人(求职登记)主
     *
     * @param id 主键ID
     * @return 影响行数
     */
    int deleteHrCandidateById(Long id);

    /**
     * 批量删除HR-候选人(求职登记)主
     *
     * @param ids 主键ID数组
     * @return 影响行数
     */
    int deleteHrCandidateByIds(Long[] ids);




    /**
     * 按候选人ID查询工作/教育经历列表
     *
     * @param candidateId 候选人ID
     * @return 经历集合（含 work/edu）
     */
    List<HrCandidateExperience> selectExperienceByCandidateId(Long candidateId);

    /**
     * 按候选人ID删除所有经历（物理删）
     *
     * @param candidateId 候选人ID
     * @return 影响行数
     */
    int deleteExperienceByCandidateId(Long candidateId);

    /**
     * 批量新增经历
     *
     * @param list 经历集合
     * @return 影响行数
     */
    int batchInsertExperience(List<HrCandidateExperience> list);




    /**
     * 按候选人ID查询家庭成员列表
     *
     * @param candidateId 候选人ID
     * @return 家庭成员集合
     */
    List<HrCandidateFamily> selectFamilyByCandidateId(Long candidateId);

    /**
     * 按候选人ID删除所有家庭成员（物理删）
     *
     * @param candidateId 候选人ID
     * @return 影响行数
     */
    int deleteFamilyByCandidateId(Long candidateId);

    /**
     * 批量新增家庭成员
     *
     * @param list 家庭成员集合
     * @return 影响行数
     */
    int batchInsertFamily(List<HrCandidateFamily> list);
}
